package com.feng.servlet3_test;

import javax.servlet.*;
import javax.servlet.annotation.HandlesTypes;
import java.util.EnumSet;
import java.util.Set;
//容器启动的时候会将HandlesTypes指定的类型下面的子类（子类子接口等）传递过来
//传入感兴趣的类型
@HandlesTypes(value = {})
public class MyServletContainerInitializer implements ServletContainerInitializer {
     //在容器启动的时候 会自动运行这个方法

    /**
     *
     * @param c  感兴趣类型的所有子类型
     * @param ctx  代表当前web应用的 ServletContext  一个应用一个ctx
     * @throws ServletException
     */
    //1.使用ServletContext注册web组件（servlet filter listener）

    @Override
    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        System.out.println("感兴趣的类型");
        for (Class<?> type:c){
            System.out.println(type);
        }
        //注册组件
        ServletRegistration.Dynamic servlet = ctx.addServlet("servlet", new UserServlet());
        servlet.addMapping("/u1","u2");
        //注册Filter
        FilterRegistration.Dynamic filter = ctx.addFilter("filter", new UserFilter());
        filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/*");
        //注册listener
        ctx.addListener(UserListener.class);

    }
}
